using Microsoft.Xna.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SCSEngine.Utils.Entities
{
    public interface IGameEntity
    {
        // COMPONENTS
        bool AddComponent(IGameComponent component);
        bool AddComponent(string componentName, IGameComponent component);

        bool RemoveComponent(IGameComponent component);
        bool RemoveComponent<GameComponent>() where GameComponent : IGameComponent;
        bool RemoveComponent(string componentName);

        GameComponent GetComponent<GameComponent>() where GameComponent : IGameComponent;
        GameComponent GetComponent<GameComponent>(string componentName) where GameComponent : IGameComponent;

        IEnumerable<IGameComponent> Components { get; }

        // PROCESSES
        bool AddProcess<Process>(object process);
        bool RemoveProcess<Process>();
        Process GetProcess<Process>();
        object GetProcess(Type processType);

        IEnumerable<object> Processes { get; }
    }
}